package modulo1.cci;

import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modulo1.cdp.*;
import modulo1.cgt.CadastroInternoApl;
import modulo1.cgt.ControleTurmaMatriculaApl;

@WebServlet(name = "TurmaCtrl", urlPatterns = {"/Turma"})
public class TurmaCtrl extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        RequestDispatcher cih = request.getRequestDispatcher("modulo1/conturmat/turma_cadastro.jsp");
        cih.forward(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String evento = request.getParameter("evento");

        if (evento != null) {
            if (evento.equals("inserir_pre")) {
                List<Curso> listaCursos = null;
                try {
                    listaCursos = CadastroInternoApl.getInstance().cursoBuscar();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                request.setAttribute("listaCursos", listaCursos);
            } else if (evento.equals("inserir")) {
                List<Disciplina> listaDisciplinas = null;
                Curso curso = null;
                try {
                    curso = CadastroInternoApl.getInstance().cursoConsultar(new Long(request.getParameter("curso")));
                    listaDisciplinas = CadastroInternoApl.getInstance().disciplinaBuscarCurso(curso);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                request.setAttribute("curso", curso.getNome());
                request.setAttribute("listaDisciplinas", listaDisciplinas);
            } else if (evento.equals("alterar") || evento.equals("consultar")) {
                long id = Long.parseLong(request.getParameter("id"));
                try {
                    Turma turma = ControleTurmaMatriculaApl.getInstance().turmaConsultar(id);
                    request.setAttribute("turma", turma);
                } catch (Exception ex) {
                    //TODO Exceção alterar turma
                    ex.printStackTrace();
                }
            } else if (evento.equals("excluir")) {
                long id = Long.parseLong(request.getParameter("id"));
                try {
                    Turma turma = ControleTurmaMatriculaApl.getInstance().turmaConsultar(id);
                    String redirect;
                    String mensagem;
                    if (turma.getEstado().equals(EnumEstadoTurma.CADASTRADA)) {
                        ControleTurmaMatriculaApl.getInstance().turmaExcluir(id);
                        redirect = "Turma";
                        mensagem = "Turma excluido com sucesso.";
                    } else {
                        redirect = "Turma";
                        mensagem = "Nao e permitido excluir turmas ja abertas.";
                    }
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                    return;
                } catch (Exception ex) {
                    //TODO Exceção excluir turma
                    ex.printStackTrace();
                    String redirect = "Turma";
                    String mensagem = ex.getMessage();
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                    return;
                }
            } else if (evento.equals("estado")) {
                long id = Long.parseLong(request.getParameter("id"));
                try {
                    Turma turma = ControleTurmaMatriculaApl.getInstance().turmaConsultar(id);
                    turma.alterarEstado();

                    ControleTurmaMatriculaApl.getInstance().turmaSalvar(turma);

                    String redirect = "Turma";
                    String mensagem = "Turma alterada com sucesso.";
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                    return;
                } catch (Exception e) {
                    e.printStackTrace();
                    String redirect = "Turma";
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + e.getMessage());
                    return;
                }
            } else if (evento.equals("professor")) {
                try {
                    List<Professor> professores = CadastroInternoApl.getInstance().professorBuscar();
                    request.setAttribute("professores", professores);
                    RequestDispatcher cih = request.getRequestDispatcher("modulo1/conturmat/turma_form_professor.jsp");
                    cih.forward(request, response);
                    return;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            RequestDispatcher cih = request.getRequestDispatcher("modulo1/conturmat/turma_form.jsp");
            cih.forward(request, response);
            return;
        }

        String buscar = request.getParameter("buscar");
        try {
            List<Turma> turmas;
            if (buscar != null) {
                turmas = ControleTurmaMatriculaApl.getInstance().turmaBuscarAno(Integer.parseInt(buscar));
            } else {
                turmas = ControleTurmaMatriculaApl.getInstance().turmaBuscar();
            }
            request.setAttribute("turmas", turmas);
        } catch (Exception ex) {
            // TODO Exceção buscar turma
        }
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String evento = request.getParameter("evento");
        if (evento != null) {
            if (evento.equals("inserir") || evento.equals("alterar")) {
                try {
                    Turma c;
                    if (request.getParameter("id") != null) {
                        c = ControleTurmaMatriculaApl.getInstance().turmaConsultar(Long.parseLong(request.getParameter("id")));
                    } else {
                        c = new Turma();
                        c.setEstado(EnumEstadoTurma.CADASTRADA);
                        c.setDisciplina(CadastroInternoApl.getInstance().disciplinaConsultar(new Long(request.getParameter("disciplina"))));
                    }

                    c.setAno(Integer.parseInt(request.getParameter("ano")));
                    c.setPeriodo(Integer.parseInt(request.getParameter("periodo")));
                    c.setQntdMinAlunos(Integer.parseInt(request.getParameter("qntdminalunos")));
                    c.setQntdMaxAlunos(Integer.parseInt(request.getParameter("qntdmaxalunos")));
                    ControleTurmaMatriculaApl.getInstance().turmaSalvar(c);

                    String redirect = "Turma";
                    String mensagem = "Turma salvo com sucesso.";
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                } catch (Exception ex) {
                    ex.printStackTrace();
                    String redirect = "Turma";
                    //String mensagem = ex.getMessage();
                    String mensagem = "Erro ao salvar turma.";
                    response.sendRedirect("resultado.jsp?redirect=" + redirect + "&mensagem=" + mensagem);
                }
                return;
            } else if (evento.equals("professor")) {
                try {
                    Turma turma = ControleTurmaMatriculaApl.getInstance().turmaConsultar(Long.parseLong(request.getParameter("id")));
                    Professor professor = CadastroInternoApl.getInstance().professorConsultar(Long.parseLong(request.getParameter("professor")));
                    turma.setProfessor(professor);
                    ControleTurmaMatriculaApl.getInstance().turmaSalvar(turma);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                response.sendRedirect("Turma?evento=alterar&id=" + request.getParameter("id"));
                return;
            }
        }

        processRequest(request, response);
    }
}
